using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

/// <summary>
/// 直接IP连接界面管理
/// </summary>
public class DirectConnectUI : MonoBehaviour
{
    [Header("UI组件")]
    [SerializeField] private GameObject directConnectPanel;
    [SerializeField] private InputField ipAddressInput;
    [SerializeField] private InputField portInput;
    [SerializeField] private Button connectButton;
    [SerializeField] private Button cancelButton;
    [SerializeField] private Text statusText;
    
    [Header("设置")]
    [SerializeField] private string defaultPort = "7777";
    [SerializeField] private Color normalTextColor = Color.white;
    [SerializeField] private Color errorTextColor = Color.red;
    
    private void Start()
    {
        // 初始化UI
        InitializeUI();
    }
    
    /// <summary>
    /// 初始化UI组件
    /// </summary>
    private void InitializeUI()
    {
        // 设置默认端口
        if (portInput != null)
        {
            portInput.text = defaultPort;
        }
        
        // 设置按钮事件
        if (connectButton != null)
        {
            connectButton.onClick.AddListener(OnConnectButtonClick);
        }
        
        if (cancelButton != null)
        {
            cancelButton.onClick.AddListener(OnCancelButtonClick);
        }
        
        // 隐藏面板
        if (directConnectPanel != null)
        {
            directConnectPanel.SetActive(false);
        }
        
        // 重置状态文本
        if (statusText != null)
        {
            statusText.text = "请输入要连接的服务器IP地址";
            statusText.color = normalTextColor;
        }
    }
    
    /// <summary>
    /// 显示直接连接面板
    /// </summary>
    public void ShowDirectConnectPanel()
    {
        if (directConnectPanel != null)
        {
            directConnectPanel.SetActive(true);
            
            // 自动获取本地IP作为默认值的提示
            if (ipAddressInput != null && string.IsNullOrEmpty(ipAddressInput.text))
            {
                ipAddressInput.placeholder.GetComponent<Text>().text = "例如: " + GetLocalIPAddress();
            }
            
            // 设置默认端口
            if (portInput != null && string.IsNullOrEmpty(portInput.text))
            {
                portInput.text = defaultPort;
            }
            
            // 重置状态文本
            if (statusText != null)
            {
                statusText.text = "请输入要连接的服务器IP地址";
                statusText.color = normalTextColor;
            }
        }
    }
    
    /// <summary>
    /// 隐藏直接连接面板
    /// </summary>
    public void HideDirectConnectPanel()
    {
        if (directConnectPanel != null)
        {
            directConnectPanel.SetActive(false);
        }
    }
    
    /// <summary>
    /// 连接按钮点击事件
    /// </summary>
    private void OnConnectButtonClick()
    {
        if (ipAddressInput == null || string.IsNullOrEmpty(ipAddressInput.text))
        {
            ShowError("请输入有效的IP地址");
            return;
        }
        
        string ipAddress = ipAddressInput.text.Trim();
        string port = portInput != null ? portInput.text.Trim() : defaultPort;
        
        // 验证IP地址格式
        System.Net.IPAddress ip;
        if (!System.Net.IPAddress.TryParse(ipAddress, out ip))
        {
            ShowError("无效的IP地址格式，请检查后重试");
            return;
        }
        
        // 验证端口号
        int portNumber;
        if (!int.TryParse(port, out portNumber) || portNumber <= 0 || portNumber > 65535)
        {
            ShowError("无效的端口号，端口范围应为1-65535");
            return;
        }
        
        // 直接连接到指定IP
        ConnectToServer(ipAddress, port);
    }
    
    /// <summary>
    /// 带超时的连接协程
    /// </summary>
    private IEnumerator ConnectWithTimeout(string ipAddress, string port)
    {
        // 记录开始连接时间
        float startTime = Time.time;
        float timeout = 10.0f; // 10秒超时
        
        // 尝试连接
        int portNumber = 0; // 默认值
        if (!string.IsNullOrEmpty(port))
        {
            if (int.TryParse(port, out portNumber))
            {
                Debug.Log($"[直接连接] 解析端口号成功: {portNumber}");
            }
            else
            {
                Debug.LogWarning($"[直接连接] 端口号格式无效: {port}，将使用默认端口");
            }
        }
        
        // 使用简化的连接逻辑替代RoomManager
        ConnectToServer(ipAddress, portNumber.ToString());
        
        // 等待连接结果或超时
        while (Time.time - startTime < timeout)
        {
            // 检查是否成功加入房间
            if (IsInRoom())
            {
                // 连接成功，隐藏面板
                HideDirectConnectPanel();
                yield break;
            }
            
            yield return new WaitForSeconds(0.5f);
        }
        
        // 如果到这里还没有退出，说明连接超时
        if (connectButton != null)
        {
            connectButton.interactable = true;
        }
        
        ShowError($"连接超时，请检查IP地址是否正确，以及目标设备是否已创建房间");
    }
    
    /// <summary>
    /// 取消按钮点击事件
    /// </summary>
    private void OnCancelButtonClick()
    {
        HideDirectConnectPanel();
    }
    
    /// <summary>
    /// 显示错误信息
    /// </summary>
    private void ShowError(string errorMessage)
    {
        if (statusText != null)
        {
            statusText.text = errorMessage;
            statusText.color = errorTextColor;
        }
        
        // 重新启用连接按钮
        if (connectButton != null)
        {
            connectButton.interactable = true;
        }
        
        Debug.LogWarning($"[DirectConnectUI] {errorMessage}");
    }
    
    /// <summary>
    /// 获取本地IP地址
    /// </summary>
    private string GetLocalIPAddress()
    {
        try
        {
            string localIP = "127.0.0.1";
            System.Net.IPHostEntry host = System.Net.Dns.GetHostEntry(System.Net.Dns.GetHostName());
            
            foreach (System.Net.IPAddress ip in host.AddressList)
            {
                if (ip.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork)
                {
                    localIP = ip.ToString();
                    break;
                }
            }
            
            return localIP;
        }
        catch (System.Exception)
        {
            return "127.0.0.1";
        }
    }

    private void ConnectToServer(string ipAddress, string port)
    {
        Debug.Log($"[DirectConnectUI] 尝试连接到: {ipAddress}:{port}");
        
        // 验证IP地址
        if (string.IsNullOrEmpty(ipAddress))
        {
            ShowError("请输入IP地址");
            return;
        }
        
        // 验证端口
        int portNumber;
        if (!int.TryParse(port, out portNumber) || portNumber <= 0 || portNumber > 65535)
        {
            ShowError("无效的端口号，端口范围应为1-65535");
            return;
        }
        
        // RoomManager已移除，使用简化逻辑
        // 保存最近使用的IP和端口
        PlayerPrefs.SetString("LastUsedIP", ipAddress);
        PlayerPrefs.SetString("LastUsedPort", port);
        PlayerPrefs.Save();
        
        // 显示连接中状态
        if (statusText != null)
        {
            statusText.text = $"网络连接功能已移除，稍后将重新实现";
            statusText.color = normalTextColor;
        }
        
        // 禁用连接按钮防止重复点击
        if (connectButton != null)
        {
            connectButton.interactable = false;
        }
        
        // 仅显示状态，不实际连接
        StartCoroutine(DelayedConnectionFeedback());
    }

    private IEnumerator DelayedConnectionFeedback()
    {
        // 等待2秒后显示消息
        yield return new WaitForSeconds(2f);
        
        ShowError("网络连接功能已移除，请等待重新实现");
        
        // 重新启用连接按钮
        if (connectButton != null)
        {
            connectButton.interactable = true;
        }
    }

    public bool IsInRoom()
    {
        // 由于RoomManager已移除，直接返回false
        return false;
    }
} 